package cl.ncx.cmvrc.persistence.bean.ordenTrabajo;

import java.sql.Timestamp;
import java.util.List;

import javax.ejb.EJBException;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import cl.ncx.cmvrc.persistence.base.entities.grua.Grua;
import cl.ncx.cmvrc.persistence.base.entities.personas.Gruero;
import cl.ncx.cmvrc.persistence.base.entities.solicitud.EstadoOt;
import cl.ncx.cmvrc.persistence.base.entities.solicitud.OrdenDeTrabajo;
import cl.ncx.cmvrc.persistence.base.entities.solicitud.Solicitud;

@Stateless(mappedName=IOrdenTrabajoSession.JNDI_NAME)
@Local({OrdenTrabajoSessionLocal.class})
@Remote({OrdenTrabajoSessionRemote.class})

public class OrdenTrabajoSessionBean implements OrdenTrabajoSessionLocal, OrdenTrabajoSessionRemote {
	
	@PersistenceContext(unitName="cmvrcPU")
	private EntityManager entityManager;
	
	public void ingresaNuevaOT(OrdenDeTrabajo oDeTrabajo) throws EJBException{
		
		try{
			if(oDeTrabajo!=null){
				//obtenemos el estado de nueva ot y seteamos valor
				EstadoOt estadoOt = entityManager.find(EstadoOt.class, new Integer(1));
				oDeTrabajo.setEstadoOt(estadoOt);
				
				//persistir
				entityManager.persist(oDeTrabajo);
			}
						
		}catch (Exception e) {
			e.printStackTrace();
			throw new EJBException(e);
		}
	}

	public void modificaOT(OrdenDeTrabajo orden_trabajo) throws EJBException{
		
		try{
			OrdenDeTrabajo modificaOt = new OrdenDeTrabajo();
			modificaOt = entityManager.find(OrdenDeTrabajo.class, orden_trabajo);
			modificaOt.setSolicitud(orden_trabajo.getSolicitud());
			modificaOt.setOrdenDeTrabajoId(orden_trabajo.getOrdenDeTrabajoId());
			modificaOt.setObservacion(orden_trabajo.getObservacion());
			
			entityManager.merge(modificaOt);
			
		}catch (Exception e) {
			e.printStackTrace();
			throw new EJBException(e);
		}
	}

	public void anulaOT(OrdenDeTrabajo orden_trabajo) throws EJBException{
		
		try{
			EstadoOt ot = entityManager.find(EstadoOt.class, new Integer(3));
			orden_trabajo.setEstadoOt(ot);
			entityManager.remove(orden_trabajo);
			
		}catch (Exception e) {
			e.printStackTrace();
			throw new EJBException(e);
		}
	}

	public void obtenerOTVigente(EstadoOt ot) throws EJBException{
		
		try{
			EstadoOt obtenerOt = new EstadoOt();
			obtenerOt = entityManager.find(EstadoOt.class, ot);
			obtenerOt.setEstadoOtId(ot.getEstadoOtId());
			obtenerOt.setNombre(ot.getNombre());
			obtenerOt.setOrdenDeTrabajos(ot.getOrdenDeTrabajos());
			
			entityManager.persist(obtenerOt);
			
		}catch (Exception e) {
			e.printStackTrace();
			throw new EJBException(e);
		}
	}
	
	@SuppressWarnings("unchecked")
	//estadoOtId = 1 eso significa que esta en proceso
	//estadoOtId = 2 eso significa que esta terminada
	//estadoOtId = 3 eso significa que esta anulada
	public List<OrdenDeTrabajo> obtenerOTRealizada() throws EJBException{
		try{
			String queryString= "SELECT ordenTrabajoId " +
								"FROM OrdenDeTrabajo ordenTrabajoId " +
								"WHERE ordenTrabajoId.estadoOt.estadoOtId =2";
			Query query = entityManager.createQuery(queryString);
			return (List<OrdenDeTrabajo>)query.getResultList();	
		}catch (Exception e) {
			e.printStackTrace();
			throw new EJBException(e);
		}
		
	}
	
	
	public OrdenDeTrabajo findOTById(Integer ordenDeTrabajoId)throws EJBException{
		try{
			return entityManager.find(OrdenDeTrabajo.class, ordenDeTrabajoId);
		}
		catch(Exception e){
			e.printStackTrace();
			throw new EJBException(e);
		}
		
	}

}
